Hi all, I have a question about why a couple of functions have their IR produced in a certain way (by clang++ on Linux x86_64). I write:
class ptr { int *p; }; void y(char, ptr a, ptr b, ptr c, ptr d, ptr e, ptr f, ptr g) {} void z(char, int *a, int *b, int *c, int *d, int *e, int *f, int *g) {} And run clang++ -std=c++11 ptr.cpp -S -emit-llvm And get the following relevant pieces of IR: %class.ptr = type { i32* } define void @_Z1yc3ptrS_S_S_S_S_S_(i8 signext, i32* %a.coerce, i32* %b.coerce, i32* %c.coerce, i32* %d.coerce, i32* %e.coerce, i64 %f.coerce, i64 %g.coerce) { // ... } define void @_Z1zcPiS_S_S_S_S_S_(i8 signext, i32* %a, i32* %b, i32* %c, i32* %d, i32* %e, i32* %f, i32* %g) { // ... } Why do the first few ptr arguments to y show up in the IR as i32*, but later arguments show up as i64? But in z, all of the pointer arguments show up with type i32*? Thanks, Matt
_______________________________________________ cfe-users mailing list cfe-users@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-users