[LLVMdev] is there a compiler barrier that is effective at codegen level?
Torvald Riegel
torvald at se.inf.tu-dresden.de
Tue Dec 22 12:57:44 PST 2009
Hi,
I would like to prevent that two adjacent calls to external functions getting
interleaved/separated by other neighboring code. This mixing seems to happen
in the code generator. I can prevent it by putting the two calls into a
separate BB, but then I can't use -simplifycfg, -jump-threading, ... as is.
Here is an example:
%160 = add i64 %158, %159 ; <i64> [#uses=1]
%161 = sub i64 %160, %startHash.0 ; <i64> [#uses=5]
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags},~{memory}"()
nounwind
%fp73 = call i8* @llvm.frameaddress(i32 0) ; <i8*> [#uses=1]
%sp74 = call i8* @llvm.stacksave() ; <i8*> [#uses=1]
call fastcc void @Function1(i8* %sp74, i8* %fp73) nounwind
%162 = call i32 (i32, ...)* @Function2(i32 0) ; <i32> [#uses=1]
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags},~{memory}"()
nounwind
In particular, I would like to prevent modifications to the stack to be put
between the calls to Function1 and Function2. Is this possible at all?
The standard asm compiler barriers don't seem to work, can I use another hack?
(I could put the calls to Function1 and Function2 into another noinline dummy
function and call this one instead, but is there some kind of barrier?)
Thanks,
Torvald
More information about the llvm-dev
mailing list