Files
mercury/tests/hard_coded/dense_lookup_switch3.exp
Zoltan Somogyi 4fe703c7b9 Implement a more cache-friendly translation of lookup switches.
Estimated hours taken: 8
Branches: main

Implement a more cache-friendly translation of lookup switches. Previously,
for a switch such as the one in

	:- pred p(foo::in, string::out, bar::out, float::out) is semidet.

	p(d, "four", f1, 4.4).
	p(e, "five", f2, 5.5).
	p(f, "six", f4("hex"), 6.6).
	p(g, "seven", f5(77.7), 7.7).

we generated three static cells, one for each argument, and then indexed
into each one in turn to get the values of HeadVar__2, HeadVar__3 and
HeadVar__4. The different static cells each represent a column here.
Each of the loads accessing the columns will access a different cache block,
so with this technique we expect to get as many cache misses as there are
output variables.

This diff changes the code we generate to use a vector of static cells
where each cell represents a row. The assignments to the output variables
will now access the different fields of a row, which will be next to each
other. We thus expect only one cache miss irrespective of the number of output
variables, at least up to the number of variables that actually fit into one
cache block.

compiler/global_data.m:
	Provide a mechanism for creating not just single (scalar) static cells,
	but arrays (vectors) of them.

compiler/lookup_switch.m:
	Use the new mechanism to generate code along the lines described above.

	Put the information passed between the two halves of the lookup switch
	implementation (detection and code generation) into an opaque data
	structure.

compiler/switch_gen.m:
	Conform to the new interface of lookup_switch.m.

compiler/ll_pseudo_type_info.m:
compiler/stack_layout.m:
compiler/string_switch.m:
compiler/unify_gen.m:
compiler/var_locn.m:
	Conform to the change to global_data.m.

compiler/llds.m:
	Define the data structures for holding vectors of static cells. Rename
	the function symbols we used to use to refer to static cells to make
	clear that they apply to scalar cells only. Provide similar mechanisms
	for representing static cell vectors and references to them.

	Generalize heap_ref heap references to allow the index to be computed
	at runtime, not compile time. For symmetry's sake, do likewise
	for stack references.

compiler/llds_out.m:
	Add the code required to write out static cell vectors.

	Rename decl_ids to increase clarity and avoid ambiguity.

compiler/code_util.m:
compiler/exprn_aux.m:
	Modify code that traverses rvals to now also traverse the new rvals
	inside memory references.

compiler/name_mangle.m:
	Provide the prefix for static cell vectors.

compiler/layout_out.m:
compiler/rtti_out.m:
compiler/opt_debug.m:
	Conform to the change to data_addrs and decl_ids.

compiler/code_info.m:
	Provide access to the new functionality in global_data.m, and conform
	to the change to llds.m.

	Provide a utility predicate needed by lookup_switch.m.

compiler/hlds_llds.m:
	Fix the formatting of some comments.

tools/binary:
tools/binary_step:
	Fix the bit rot that has set in since they were last used (the rest
	of the system has changed quite a lot since then). I had to do so
	to debug one part of this change.

tests/hard_coded/dense_lookup_switch2.{m,exp}:
tests/hard_coded/dense_lookup_switch3.{m,exp}:
	New test cases to exercise the new algorithm.

tests/hard_coded/Mmakefile:
	Enable the new test cases, as well as an old one (from 1997!)
	that seems never to have been enabled.
2006-03-30 02:46:08 +00:00

256 lines
5.6 KiB
Plaintext

0: no upper no lower
1: no upper no lower
2: no upper no lower
3: no upper no lower
4: no upper no lower
5: no upper no lower
6: no upper no lower
7: no upper no lower
8: no upper no lower
9: no upper no lower
10: no upper no lower
11: no upper no lower
12: no upper no lower
13: no upper no lower
14: no upper no lower
15: no upper no lower
16: no upper no lower
17: no upper no lower
18: no upper no lower
19: no upper no lower
20: no upper no lower
21: no upper no lower
22: no upper no lower
23: no upper no lower
24: no upper no lower
25: no upper no lower
26: no upper no lower
27: no upper no lower
28: no upper no lower
29: no upper no lower
30: no upper no lower
31: no upper no lower
32: no upper no lower
33: no upper no lower
34: no upper no lower
35: no upper no lower
36: no upper no lower
37: no upper no lower
38: no upper no lower
39: no upper no lower
40: no upper no lower
41: no upper no lower
42: no upper no lower
43: no upper no lower
44: no upper no lower
45: no upper no lower
46: no upper no lower
47: no upper no lower
48: no upper no lower
49: no upper no lower
50: no upper no lower
51: no upper no lower
52: no upper no lower
53: no upper no lower
54: no upper no lower
55: no upper no lower
56: no upper no lower
57: no upper no lower
58: no upper no lower
59: no upper no lower
60: no upper no lower
61: no upper no lower
62: no upper no lower
63: no upper no lower
64: no upper no lower
65: no upper lower a
66: no upper lower b
67: no upper lower c
68: no upper lower d
69: no upper lower e
70: no upper lower f
71: no upper lower g
72: no upper lower h
73: no upper lower i
74: no upper lower j
75: no upper lower k
76: no upper lower l
77: no upper lower m
78: no upper lower n
79: no upper lower o
80: no upper lower p
81: no upper lower q
82: no upper lower r
83: no upper lower s
84: no upper lower t
85: no upper lower u
86: no upper lower v
87: no upper lower w
88: no upper lower x
89: no upper lower y
90: no upper lower z
91: no upper no lower
92: no upper no lower
93: no upper no lower
94: no upper no lower
95: no upper no lower
96: no upper no lower
97: upper A no lower
98: upper B no lower
99: upper C no lower
100: upper D no lower
101: upper E no lower
102: upper F no lower
103: upper G no lower
104: upper H no lower
105: upper I no lower
106: upper J no lower
107: upper K no lower
108: upper L no lower
109: upper M no lower
110: upper N no lower
111: upper O no lower
112: upper P no lower
113: upper Q no lower
114: upper R no lower
115: upper S no lower
116: upper T no lower
117: upper U no lower
118: upper V no lower
119: upper W no lower
120: upper X no lower
121: upper Y no lower
122: upper Z no lower
123: no upper no lower
124: no upper no lower
125: no upper no lower
126: no upper no lower
127: no upper no lower
128: no upper no lower
129: no upper no lower
130: no upper no lower
131: no upper no lower
132: no upper no lower
133: no upper no lower
134: no upper no lower
135: no upper no lower
136: no upper no lower
137: no upper no lower
138: no upper no lower
139: no upper no lower
140: no upper no lower
141: no upper no lower
142: no upper no lower
143: no upper no lower
144: no upper no lower
145: no upper no lower
146: no upper no lower
147: no upper no lower
148: no upper no lower
149: no upper no lower
150: no upper no lower
151: no upper no lower
152: no upper no lower
153: no upper no lower
154: no upper no lower
155: no upper no lower
156: no upper no lower
157: no upper no lower
158: no upper no lower
159: no upper no lower
160: no upper no lower
161: no upper no lower
162: no upper no lower
163: no upper no lower
164: no upper no lower
165: no upper no lower
166: no upper no lower
167: no upper no lower
168: no upper no lower
169: no upper no lower
170: no upper no lower
171: no upper no lower
172: no upper no lower
173: no upper no lower
174: no upper no lower
175: no upper no lower
176: no upper no lower
177: no upper no lower
178: no upper no lower
179: no upper no lower
180: no upper no lower
181: no upper no lower
182: no upper no lower
183: no upper no lower
184: no upper no lower
185: no upper no lower
186: no upper no lower
187: no upper no lower
188: no upper no lower
189: no upper no lower
190: no upper no lower
191: no upper no lower
192: no upper no lower
193: no upper no lower
194: no upper no lower
195: no upper no lower
196: no upper no lower
197: no upper no lower
198: no upper no lower
199: no upper no lower
200: no upper no lower
201: no upper no lower
202: no upper no lower
203: no upper no lower
204: no upper no lower
205: no upper no lower
206: no upper no lower
207: no upper no lower
208: no upper no lower
209: no upper no lower
210: no upper no lower
211: no upper no lower
212: no upper no lower
213: no upper no lower
214: no upper no lower
215: no upper no lower
216: no upper no lower
217: no upper no lower
218: no upper no lower
219: no upper no lower
220: no upper no lower
221: no upper no lower
222: no upper no lower
223: no upper no lower
224: no upper no lower
225: no upper no lower
226: no upper no lower
227: no upper no lower
228: no upper no lower
229: no upper no lower
230: no upper no lower
231: no upper no lower
232: no upper no lower
233: no upper no lower
234: no upper no lower
235: no upper no lower
236: no upper no lower
237: no upper no lower
238: no upper no lower
239: no upper no lower
240: no upper no lower
241: no upper no lower
242: no upper no lower
243: no upper no lower
244: no upper no lower
245: no upper no lower
246: no upper no lower
247: no upper no lower
248: no upper no lower
249: no upper no lower
250: no upper no lower
251: no upper no lower
252: no upper no lower
253: no upper no lower
254: no upper no lower