[cfe-commits] r65746 - in /cfe/trunk: lib/CodeGen/CGBlocks.cpp lib/CodeGen/CGExprConstant.cpp lib/CodeGen/CodeGenFunction.h test/CodeGen/blocks.c
Anders Carlsson
andersca at mac.com
Sun Mar 1 12:28:44 PST 2009
On Mar 1, 2009, at 11:12 AM, Mike Stump wrote:
> On Mar 1, 2009, at 10:58 AM, Anders Carlsson wrote:
>> 1 mar 2009 kl. 10.51 skrev Mike Stump:
>>
>>> On Feb 28, 2009, at 5:09 PM, Anders Carlsson wrote:
>>>> + // Check if the block can be global.
>>>> + if (CanBlockBeGlobal(Info))
>>>> + return CGM.GetAddrOfGlobalBlock(BE, Name.c_str());
>>>
>>> Like the last change, this also breaks things that were
>>> working. :-( Please, monotonic improvements only please. We
>>> lazily create imports during codegen and your code doesn't account
>>> for that.
>>
>> I think it is better to just use one code path for creating global
>> blocks.
>
> Why? It replicates the other code entirely.
If one code path replicates the other code path, then why have two
code paths in the first place? I think at this stage it's simpler to
look for the block variables beforehand - it simplifies the
"Unsupported" checks and it also makes code like
void f() {
int a;
^{
^{
a;
};
};
}
easier to deal with. In the future we could even be clever and sort
imported block variables by size/alignment to minimize memory wasted
in "holes".
>> I added code to look up imports beforehand.
>
> And my point it, is is wrong. It is slow, I don't want to walk
> around looking for all the data you walk around for and it is
> unnecessary and you broke previously working code like:
>
Traversing isn't that slow...we could even make it only traverse
blocks that we know have variables.
(If by "broke" you mean that it now gives an "unsupported" error, then
yes I broke it ;)
Anders
More information about the cfe-commits
mailing list