> define void @_Z1g1S(%struct.S* noalias %s) { > entry: %tmp131415 = getelementptr %struct.S* %s, i32 0, i32 0 > ; <i32 (...)***> [#uses=1] %tmp16 = load i32 (...)*** %tmp131415, > align 4 ; <i32 (...)**> [#uses=1] > %tmp26277 = load i32 (...)** %tmp16 ; <i32 (...)*> > [#uses=1] > %tmp2829 = bitcast i32 (...)* %tmp26277 to void (%struct.S*)* > ; <void (%struct.S*)*> [#uses=1] > tail call void %tmp2829( %struct.S* %s ) > ret void > } > > This still has the vtable dispatch (as required) but does not have any pointer > to method cruft left.
Is it really required? Since S is passed by value, I think one can be sure that method called is S::f and not one from a class that inherits from S. Maybe a LLVM type definition should include support for defining that part of it is constant? Cheers, -- Rafael Avila de Espindola Google Ireland Ltd. Gordon House Barrow Street Dublin 4 Ireland Registered in Dublin, Ireland Registration Number: 368047 _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits