[llvm-dev] llvm optimizer turning musttail into tail
Carlo Kok via llvm-dev
llvm-dev at lists.llvm.org
Mon Nov 28 02:50:10 PST 2016
That looks like it should work, but seems to check the callee only, not
the call itself, so :
musttail call void bitcast (i32 (i32, i8*, %"Type"*)* @"Method" to
void (i32, i8*)*)(i32 %0, i8* %1) #3
attributes #3 = { "thunk"="true" }
doesn't work, and I can't place this on the actual method, since that
one isn't a thunk.
On 2016-11-27 21:57, David Majnemer wrote:
> Try using the "thunk"
> attribute: http://llvm.org/docs/LangRef.html#function-attributes
>
> InstCombine has logic to avoid getting rid of the cast in such
> situations: https://github.com/llvm-mirror/llvm/blob/master/lib/Transforms/InstCombine/InstCombineCalls.cpp#L2821
>
>
>
> On Sun, Nov 27, 2016 at 7:40 AM, Carlo Kok <ck at remobjects.com
> <mailto:ck at remobjects.com>> wrote:
>
> Inst combine yes. However it shouldn't drop this bit cast in the
> first place, since the last parameter isn't available. (It only
> works because of this must tail)
>
>
> On 27 November 2016 01:37:43 CET, Sean Silva <chisophugis at gmail.com
> <mailto:chisophugis at gmail.com>> wrote:
>
> r287955 seems like it might be related.
>
> -- Sean Silva
>
> On Sat, Nov 26, 2016 at 4:06 PM, Sean Silva
> <chisophugis at gmail.com <mailto:chisophugis at gmail.com>> wrote:
>
> This sounds buggy to me. What pass is doing this?
>
> -- Sean Silva
>
> On Thu, Nov 24, 2016 at 5:39 AM, Carlo Kok via llvm-dev
> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>>
> wrote:
>
>
> I've got some calls like:
>
> musttail call void bitcast (i32 (i32, i8*, %Type*)*
> @MyMethod to void (i32, i8*)*)(i32 %0, i8* %1)
> ret void
>
> Into something like:
> %8 = tail call i32 @MyMethod(i32 %0, i8* %1, %Type* null)
> ret void
>
> I realize I'm losing a parameter there, but this is an
> interface jump trick I use and relies on the end code
> being a 'jmp' (x86). I realize i can probably use noopt
> & noinline to do this trick, but I do want llvm to
> optimize and inline calls if it can prove it always
> calls a given method. Any way i can do this?
>
> --
> Carlo Kok
> RemObjects Software
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>
>
>
>
> --
> Carlo Kok
> RemObjects Software
>
>
--
Carlo Kok
RemObjects Software
More information about the llvm-dev
mailing list