Mercurial > hg > graal-compiler
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 } |