comparison graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/DelayedFrameMapBuilder.java @ 18447:f933c2d7521b

FrameBuilder: add FrameMappingToolImpl.
author Josef Eisl <josef.eisl@jku.at>
date Mon, 17 Nov 2014 18:28:51 +0100
parents 1c92d437179b
children 645aa30b23a7
comparison
equal deleted inserted replaced
18446:163d1a082ccc 18447:f933c2d7521b
161 } 161 }
162 162
163 public FrameMap buildFrameMap(LIRGenerationResult res) { 163 public FrameMap buildFrameMap(LIRGenerationResult res) {
164 HashMap<VirtualStackSlot, StackSlot> mapping = new HashMap<>(); 164 HashMap<VirtualStackSlot, StackSlot> mapping = new HashMap<>();
165 // fill 165 // fill
166 mapStackSlots(mapping); 166 FrameMappingToolImpl tool = new FrameMappingToolImpl(mapping, this);
167 tool.mapStackSlots();
167 for (CallingConvention cc : calls) { 168 for (CallingConvention cc : calls) {
168 frameMap.callsMethod(cc); 169 frameMap.callsMethod(cc);
169 } 170 }
170 // rewrite 171 // rewrite
171 mappables.forEach(m -> m.map(mapping::get)); 172 mappables.forEach(m -> m.map(tool));
172 173
173 frameMap.finish(); 174 frameMap.finish();
174 return frameMap; 175 return frameMap;
175 }
176
177 protected void mapStackSlots(HashMap<VirtualStackSlot, StackSlot> mapping) {
178 for (TrackedVirtualStackSlot virtualSlot : stackSlots) {
179 StackSlot slot = virtualSlot.transform();
180 mapping.put(virtualSlot, slot);
181 }
182 } 176 }
183 177
184 public void requireMapping(FrameMappable mappable) { 178 public void requireMapping(FrameMappable mappable) {
185 this.mappables.add(mappable); 179 this.mappables.add(mappable);
186 } 180 }
187 181
182 List<TrackedVirtualStackSlot> getStackSlots() {
183 return stackSlots;
184 }
185
188 } 186 }