rnk added a comment.

So, if clang were to use a temporary alloca for the byval parameter, then yes, 
I agree marking it as a tail call would be incorrect. However, clang doesn't 
use an alloca, it forwards the byval pointer parameter directly to the callee:

  define i32 @_ZThn4_N1C4SeekE6_LARGE(%class.C* nocapture readnone %this, 
%union._LARGE* byval nocapture readonly align 4 %L) unnamed_addr #0 align 2 {
  entry:
    %call = tail call i32 @_ZN1C4SeekE6_LARGE(%class.C* undef, %union._LARGE* 
byval nonnull align 4 %L)
    ret i32 %call
  }

Maybe the test case is over-reduced, or the problematic IR was produced by an 
older version of clang?


https://reviews.llvm.org/D22900



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to